var MongoClient=require('mongodb').MongoClient; 
var ObjectID=require('mongodb').ObjectID; 

var Config=require('./config.js');

class Db {
    static getInstance(){ //单例 解决多次实例化 实例不共享的问题
        if(!Db.instance){
            Db.instance=new Db();
        }
        return Db.instance
    }
    constructor(){
        this.dbClient='' //放db对象
        this.connect() //初始化的时候连接数据库
    };
    connect(){//连接数据库
        let that=this;
        return new Promise(function(resolve,reject) {
            if (!that.dbClient) { //解决多次连接数据库的问题
                MongoClient.connect(Config.dbUrl,(err,client)=>{            
                    if (err) { 
                        reject(err);
                        return;
                    }else{
                        that.dbClient = client.db(Config.dbName);
                        resolve(that.dbClient) 
                    } 
                })
            }else{
                resolve(that.dbClient) 
            }
            
        })

        
    };
    find(collectionName,json){
        return new Promise((resolve,reject)=>{
            this.connect().then((db)=>{  
                var result= db.collection(collectionName).find(json);
                result.toArray((err,docs)=>{
                    if (err) {
                        reject(err)
                        return;
                    }
                    resolve(docs)
                });
            })
        })
        
    };
    update(collectionName,json1,json2){
        return new Promise((resolve,reject)=>{
            this.connect().then((db)=>{
                db.collection(collectionName).updateOne(json1,{
                    $set:json2},(err,result)=>{
                        if (err) {
                            reject(err)
                            return;
                        }
                        resolve(result)
                })
            })
        })
    };
    insert(collectionName,json){
        
        return new Promise((resolve,reject)=>{
            this.connect().then((db)=>{
                db.collection(collectionName).insertOne(json,(err,result)=>{
                    if (err) {
                        reject(err)
                        return;
                    }
                    resolve(result)
                })
            })
        })
    };
    remove(collectionName,json){
        return new Promise((resolve,reject)=>{
            this.connect().then((db)=>{
                db.collection(collectionName).removeOne(json,(err,result)=>{
                    if (err) {
                        reject(err)
                        return;
                    }
                    resolve(result)
                })
            })
        })
    }
    getObjectId(id){
        return new ObjectID(id); //mongodb里面查询_id 把字符串转换成对象
    }
}
module.exports=Db.getInstance()